﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domain.Model.Services;
using Domain.Model.Agentes;
using Domain.Model.Repositories;
using Domain.Model.Aggregates;

namespace Domain.Model.Entidades.Agentes
{
    public class AgenteService: IAgenteService
    {
        /// Referencia al repositorio de agentes
        private AgenteRepository agenteRepository;


        //Constructor
        public AgenteService(AgenteRepository agenteRepository)
        {
            if (agenteRepository == null)
            {
                throw new ArgumentNullException("agenteRepository");
            }
            this.agenteRepository = agenteRepository;
        }

        public Agente AgenteFromId(string agenteId)
        {
            return this.agenteRepository.FromId(new AgenteId(agenteId));
        }

        public AgenteId CreateAgente(string nombres, string apellidos, string placa, string rango)
        {
            Agente newAgente;
            newAgente = AgenteAggregate.CreateAgente((AgenteId)agenteRepository.NextIdentity(),
                                    nombres,apellidos,placa, rango);
            this.agenteRepository.Insert(newAgente);
            return (AgenteId)newAgente.Identity;
        }


        public List<Agente> All()
        {
            return this.agenteRepository.All();
        }


        public void RemoveAgente(AgenteId agenteId)
        {
            this.agenteRepository.Remove(agenteId);
        }


        public AgenteId EditAgente(AgenteId agenteId, string nombres, string apellidos, string placa, string rango)
        {
            Agente newAgente;
            newAgente = AgenteAggregate.CreateAgente(agenteId,
                                    nombres, apellidos, placa, rango);
            this.agenteRepository.Update(newAgente);
            return (AgenteId)newAgente.Identity;
        }
    }
}
